package hehe.container;

import hehe.container.base.ResourcePath;
import hehe.container.build.Build;
import hehe.container.build.xml.handler.Handler;
import hehe.container.build.xml.parse.XmlPath;

import java.io.File;

/**
 * 容器加载应用流程
 *<B>说明：</B>
 *<pre>
 * 略
 *</pre>
 *<B>示例：</B>
 *<pre>
 *  略
 *</pre>
 *<B>日志：</B>
 *<pre>
 *  略
 *</pre>
 *<B>注意事项：</B>
 *<pre>
 *  略
 *</pre>
 */
public class Application
{
    protected String xmlFilePath;

    protected Container container;

    public Application()
    {
        this.run();
    }

    public Application(String xmlFilePath)
    {
        this.xmlFilePath = xmlFilePath;
        this.run();
    }

    /**
     * 主流程入口
     *<B>说明：</B>
     *<pre>
     * 略
     *</pre>
     */
    public void run()
    {
        this.container = Container.getContainer();
        this.init();
    }

    /**
     * 初始化
     *<B>说明：</B>
     *<pre>
     *  构建bean 定义
     *  扫描注解
     *</pre>
     */
    protected void init()
    {
        // 注册容器配置路径路径别名
        ResourcePath resourcePath = this.container.getResourcePath();
        String confPath = this.xmlFilePath.substring(0,this.xmlFilePath.lastIndexOf(File.separator));
        resourcePath.setAlias(ResourcePath.CONF_ALIAS,confPath);

        // 加载xml配置
        this.loadXml();
        // 扫描class 类文件,触发处理器
        this.scan();
    }

    /**
     * 扫描事件处理器
     *<B>说明：</B>
     *<pre>
     * 略
     *</pre>
     */
    protected void scan()
    {
        this.container.doScan();
    }

    /**
     * 加载xml配置
     *<B>说明：</B>
     *<pre>
     * 略
     *</pre>
     */
    public void loadXml()
    {
        Build.load(this.xmlFilePath);
    }
}
